﻿<template>
  <div ref="boxOutWrap" class="boxOutWrap">
	<div ref="boxForm" class="boxForm">  
    <a-card :bordered="false" :bodyStyle="tstyle">

      <div class="table-page-search-wrapper" v-if="hasPerm('TestStudents4:page')">
        <a-form layout="inline">
          <a-row :gutter="48">
            <a-col :md="8" :sm="24">
              <a-form-item label="学生姓名">
                <a-input v-model="queryParam.name" allow-clear placeholder="请输入学生姓名"/>
              </a-form-item>
            </a-col><a-col :md="8" :sm="24">
              <a-form-item label="学生年龄">
                <a-input-number v-model="queryParam.age" style="width: 100%" allow-clear placeholder="请输入学生年龄"/>
              </a-form-item>
            </a-col><template v-if="advanced">
              <a-col :md="8" :sm="24">
                <a-form-item label="零花钱">
                  <a-input v-model="queryParam.hasMoney" allow-clear placeholder="请输入零花钱"/>
                </a-form-item>
              </a-col>
			<a-col :md="8" :sm="24">
				<a-form-item label="是否在校">
					<a-select :allowClear="true" style="width: 100%" v-model="queryParam.startName" placeholder="请选择是否在校">
						<a-select-option v-for="(item,index) in startNameData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
					</a-select>
				</a-form-item>
			</a-col>
		<a-col :md="8" :sm="24">
                <a-form-item label="性别">
                  <a-input-number v-model="queryParam.gender" style="width: 100%" allow-clear placeholder="请输入性别"/>
                </a-form-item>
              </a-col>          <!--年月日时分秒-->
			<!--时间范围-->

				<a-col :md="8" :sm="24">
					<a-form-item label="出生日期">
						<a-range-picker style="width: 100%" :placeholder="['开始时间', '结束时间']"  :show-time="{
format: 'HH:mm:ss',  defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.brithDate"  value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"   @change="onChangebrithDate"/>

					</a-form-item>
				</a-col>
			          <!--年月日时分秒-->
			<!--时间范围-->

				<a-col :md="8" :sm="24">
					<a-form-item label="创建时间">
						<a-range-picker style="width: 100%" :placeholder="['开始时间', '结束时间']"  :show-time="{
format: 'HH:mm:ss',  defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.createdTime"  value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"   @change="onChangecreatedTime"/>

					</a-form-item>
				</a-col>
			          <!--年月日时分秒-->
			<!--时间范围-->

				<a-col :md="8" :sm="24">
					<a-form-item label="更新时间">
						<a-range-picker style="width: 100%" :placeholder="['开始时间', '结束时间']"  :show-time="{
format: 'HH:mm:ss',  defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.updatedTime"  value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"   @change="onChangeupdatedTime"/>

					</a-form-item>
				</a-col>
			
              <a-col :md="8" :sm="24">
                <a-form-item label="创建者名称">
                  <a-input v-model="queryParam.createdUserName" allow-clear placeholder="请输入创建者名称"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="修改者名称">
                  <a-input v-model="queryParam.updatedUserName" allow-clear placeholder="请输入修改者名称"/>
                </a-form-item>
              </a-col>	</template>

            <a-col :md="8" :sm="24" >
              <span class="table-page-search-submitButtons">
                <a-button type="primary" @click="$refs.table.refresh(true)" >查询</a-button>
                <a-button style="margin-left: 8px" @click="() => queryParam = {}">重置</a-button>
                <a @click="toggleAdvanced" style="margin-left: 8px"> {{ advanced ? '收起' : '展开' }}
                  <a-icon :type="advanced ? 'up' : 'down'"/>
                </a>
              </span>
            </a-col>

          </a-row>
        </a-form>
      </div>
    </a-card>
	</div>
    <a-card :bordered="false">
      <s-table
        ref="table"
        :columns="columns"
        :data="loadData"
        :alert="true"
		@changeTablePage="pageInfo = $event"
		:scroll="{x: true,y:tableHeight}"
        :rowKey="(record) => record.id"
        :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }">
        <template class="table-operator" slot="operator" v-if="hasPerm('TestStudents4:add')" >
		<div ref="actionBar" class="actionBar">
          <a-button type="info" v-if="hasPerm('TestStudents4:exportExcel')" icon="download" @click="TestStudents4ToExcel()">
            导出
          </a-button>
			<a-button type="primary" v-if="hasPerm('TestStudents4:add')" icon="plus" @click="$refs.addForm.add()">新增学生信息表4</a-button>
		</div>
		</template>
		  <span slot="startNamescopedSlots" slot-scope="text">
			<div v-if="text===true ">
				<a-tag color="green">是</a-tag>
			</div>
			<div v-else-if="text==false">
				<a-tag color="volcano">否</a-tag>
			</div>
			<div v-else=""></div>
			</span>
		  <span slot="action" slot-scope="text, record">
			
			<a v-if="hasPerm('TestStudents4:edit')" @click="$refs.editForm.edit(record)">编辑</a>
          <a-divider type="vertical" v-if="hasPerm('TestStudents4:edit') & hasPerm('TestStudents4:delete')"/>
          <a-popconfirm v-if="hasPerm('TestStudents4:delete')" placement="topRight" title="确认删除？" @confirm="() => TestStudents4Delete(record)">
            <a>删除</a>
          </a-popconfirm>
        </span>
      </s-table>
      <add-form ref="addForm" @ok="handleOk" />
      <edit-form ref="editForm" @ok="handleOk" />
	  <excel-form ref="excelForm" @ok="handleOk" />
    </a-card>
  </div>
</template>
<script>
	import { STable } from '@/components'
	import moment from 'moment'
	import { TestStudents4Page, TestStudents4Delete, TestStudents4ToExcel } from '@/api/modular/main/TestDemo/TestStudents4Manage'
	//自定义table高度
	import setTableHtMixin from '@/mixins/handleTableHt.js'
	import addForm from './addForm.vue'
	import { exportExcel } from '@/utils/exportToExcel'
	import { downloadFile } from '@/utils/util'
	import editForm from './editForm.vue'
	import excelForm from './excelForm.vue'
	export default {
	mixins: [setTableHtMixin],
	components: {
	STable,
	addForm,
	editForm,
	excelForm
	},
	data () {
	return {
	advanced: false, // 高级搜索 展开/关闭
	queryParam: {},
	 pageInfo: {
        current: 1,
        pageSize: 10
      },
	columns: [
	{
	title:'序号',
	width: '60px',
	align: 'center',
	customRender: (text, record, index) => `${index + 1 + (this.pageInfo.current - 1) * this.pageInfo.pageSize}`
	},
	{
	title: '学生姓名',
	align: 'center',
	customHeaderCell: () => {
	return {
	 style: {
	'min-width': ''//最小列宽设置
	 }
	 }
	},
	customCell: () => {
	return {
	style: {
	'min-width': ''//最小列宽设置
	}
	}
	},
	sorter: true,
	dataIndex: 'name'
	},
	{
	title: '学生年龄',
	align: 'center',
	customHeaderCell: () => {
	return {
	 style: {
	'min-width': ''//最小列宽设置
	 }
	 }
	},
	customCell: () => {
	return {
	style: {
	'min-width': ''//最小列宽设置
	}
	}
	},
	sorter: true,
	dataIndex: 'age'
	},
	{
	title: '零花钱',
	align: 'center',
	customHeaderCell: () => {
	return {
	 style: {
	'min-width': ''//最小列宽设置
	 }
	 }
	},
	customCell: () => {
	return {
	style: {
	'min-width': ''//最小列宽设置
	}
	}
	},
	sorter: true,
	dataIndex: 'hasMoney'
	},
	{
	title: '是否在校',
	align: 'center',
	customHeaderCell: () => {
	return {
	 style: {
	'min-width': ''//最小列宽设置
	 }
	 }
	},
	customCell: () => {
	return {
	style: {
	'min-width': ''//最小列宽设置
	}
	}
	},
	sorter: true,
	dataIndex: 'startName',
	scopedSlots: { customRender: 'startNamescopedSlots' }
	},
	{
	title: '性别',
	align: 'center',
	customHeaderCell: () => {
	return {
	 style: {
	'min-width': ''//最小列宽设置
	 }
	 }
	},
	customCell: () => {
	return {
	style: {
	'min-width': ''//最小列宽设置
	}
	}
	},
	sorter: true,
	dataIndex: 'gender'
	},
	{
	title: '出生日期',
	align: 'center',
	customHeaderCell: () => {
	return {
	 style: {
	'min-width': ''//最小列宽设置
	 }
	 }
	},
	customCell: () => {
	return {
	style: {
	'min-width': ''//最小列宽设置
	}
	}
	},
	sorter: true,
	dataIndex: 'brithDate'
	},
	{
	title: '创建时间',
	align: 'center',
	customHeaderCell: () => {
	return {
	 style: {
	'min-width': ''//最小列宽设置
	 }
	 }
	},
	customCell: () => {
	return {
	style: {
	'min-width': ''//最小列宽设置
	}
	}
	},
	sorter: true,
	dataIndex: 'createdTime'
	},
	{
	title: '更新时间',
	align: 'center',
	customHeaderCell: () => {
	return {
	 style: {
	'min-width': ''//最小列宽设置
	 }
	 }
	},
	customCell: () => {
	return {
	style: {
	'min-width': ''//最小列宽设置
	}
	}
	},
	sorter: true,
	dataIndex: 'updatedTime'
	},
	{
	title: '创建者名称',
	align: 'center',
	customHeaderCell: () => {
	return {
	 style: {
	'min-width': ''//最小列宽设置
	 }
	 }
	},
	customCell: () => {
	return {
	style: {
	'min-width': ''//最小列宽设置
	}
	}
	},
	sorter: true,
	dataIndex: 'createdUserName'
	},
	{
	title: '修改者名称',
	align: 'center',
	customHeaderCell: () => {
	return {
	 style: {
	'min-width': ''//最小列宽设置
	 }
	 }
	},
	customCell: () => {
	return {
	style: {
	'min-width': ''//最小列宽设置
	}
	}
	},
	sorter: true,
	dataIndex: 'updatedUserName'
	}
	],
	tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
	// 加载数据方法 必须为 Promise 对象
	loadData: parameter => {
	return TestStudents4Page(Object.assign(parameter, this.switchingDate())).then((res) => {
	return res.data
	})
	},
	selectedRowKeys: [],
	selectedRows: []
	}
	},
	created () {
	if (this.hasPerm('TestStudents4:edit') || this.hasPerm('TestStudents4:delete')) {
	this.columns.push({
	title: '操作',
	width: '150px',
	dataIndex: 'action',
	scopedSlots: { customRender: 'action' }
	})
	}
	const path = this.$route.path
	const columnStr = window.localStorage.getItem(path)
	if(columnStr) {
	var _columns = JSON.parse(columnStr)
	this.columns.forEach(element => {
	var fObj = _columns.find((item, index) => {
	return item.dataIndex === element.dataIndex;
	})
	if(fObj!=undefined && fObj!=null){
	element.checked=fObj.checked;
	}
	});
	}
	const startNameOption = this.$options
	this.startNameData = startNameOption.filters['dictData']('yes_true_false')

	this.handleTableHt() //设置主表表格高度
	window.addEventListener(
	'resize',
	() => {
	this.handleTableHt() // 监听屏幕大小改变表格高度
	},
	false
	)
	
	},
	methods: {
	moment,
	/**
	* 查询参数组装
	*/
	switchingDate () {
	const obj = JSON.parse(JSON.stringify(this.queryParam))
	return obj
	},
	TestStudents4Delete (record) {
	TestStudents4Delete(record).then((res) => {
	if (res.success) {
	this.$message.success('删除成功')
	this.$refs.table.refresh()
	} else {
	this.$message.error('删除失败') // + res.message
	}
	})
	},


	TestStudents4ToExcel() {
	this.loading = true
	let entozh = {};
	const path = this.$route.path;
	if (window.localStorage.getItem(path)) {
	JSON.parse(window.localStorage.getItem(path)).forEach(item => {
	if (item.dataIndex != 'action' && item.checked) {
	entozh[item.dataIndex] = item.title
	}
	})
	} else { //直接点导出
	this.columns.forEach(item => {
	if (item.dataIndex != 'action') {
	entozh[item.dataIndex] = item.title
	}
	})
	}
	TestStudents4Page(Object.assign({ pageSize: 100000, pageIndex: 1 }, this.queryParam)).then((res) => {
	this.loading = false;
	//需要截取日期的字段
	var arrDataCutout = this.columns.filter(v => v.customCutout == true);
	res.data.rows.forEach(item => {
	var arrKeys = Object.keys(item);
	arrKeys.forEach(key => {
	var strFieldDic = key + 'Data';
	//枚举转值
	if (this[strFieldDic] && this[strFieldDic].length > 0) {
	let arrFieldDic = this[strFieldDic].filter(v => String(v.code) == String(item[key]));
	if (arrFieldDic.length > 0) {
	item[key] = arrFieldDic[0]?.name || '没有枚举值';
	}
	}
	// 日期截取
	if (arrDataCutout.length > 0) {
	arrDataCutout.forEach(itemIn => {
	if (key == itemIn.dataIndex && item[key]) {
	item[key] = item[key].split(" ")[0]
	}
	})
	}
	});
	})
	exportExcel(res.data.rows, entozh, "xlsx", `${this.$route.meta.title}`)
	}).catch((err) => {
	this.loading = false
	this.$message.error('下载错误：获取文件流错误' + err)
	})
	},


	toggleAdvanced () {
	this.advanced = !this.advanced
	this.handleTableHt() //设置主表表格高度
	},
	onChangebrithDate(date, dateString) {
	  this.queryParam.brithDate = dateString
	},
	onChangecreatedTime(date, dateString) {
	  this.queryParam.createdTime = dateString
	},
	onChangeupdatedTime(date, dateString) {
	  this.queryParam.updatedTime = dateString
	},
	handleOk () {
	this.$refs.table.refresh()
	},
	onSelectChange (selectedRowKeys, selectedRows) {
	this.selectedRowKeys = selectedRowKeys
	this.selectedRows = selectedRows
	}
	}
	}
</script>
<style lang="less">
  .table-operator {
    margin-bottom: 18px;
  }
  button {
    margin-right: 8px;
  }
</style>
